//抽象类，抽象类存在的最大意义就是为了被继承
abstract class Shape {
    public int a = 10;


    //抽象方法，这个方法没有具体的实现
    //抽象方法不能被private、static、final修饰，也就是要满足重写的规则
    public abstract void draw();

    public void func() {
        System.out.println("抽象类中也可以有普通成员变量和方法");
    }
}
//如果一个抽象类B继承了抽象类A,那B中不需要重写A中的抽象方法,
// 如果B再被一个普通类C继承，那这个普通类C就需要重写抽象方法
abstract class B extends Shape {

}
class C extends B {
    @Override
    public void draw() {

    }
}
class Rect extends Shape {
    //如果一个类继承了抽象类，那这个类中必须重写抽象类中的抽象方法
    @Override
    public void draw() {
        System.out.println("矩形");
    }
}
public class Test {
    public static void main(String[] args) {
        //Shape shape = new Shape();//抽象方法不能实例化
        Shape shape = new Rect();
        shape.draw();
    }
}
